package org.wikinews.repo;

import java.util.Date;
import java.util.List;

import javax.persistence.Query;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.wikinews.base.BaseRepo;
import org.wikinews.model.Leitura;
import org.wikinews.model.Post;
import org.wikinews.model.Usuario;

/**
 * Repositório de dados para a entidade de leitura do post.
 * 
 * @author leonardo
 * 
 */
@Name("leituraRepo")
@Scope(ScopeType.STATELESS)
@AutoCreate
public class LeituraRepo extends BaseRepo<Leitura> {

	/**
	 * Se não existir leitura para o post e usuário cria um novo e retorna senão
	 * apenas retorna a leitura existente.
	 * 
	 * @param post
	 * @return
	 */
	public Leitura adicionar(Post post, Usuario usuario) {
		Leitura leitura = getLeituraPorPost(post, usuario);
		if (leitura == null) {
			leitura = new Leitura(post, usuario, new Date());
			persist(leitura);
		}
		return leitura;
	}

	/**
	 * Retorna a leitura para o post e usuário corrente.
	 * 
	 * @param post
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private Leitura getLeituraPorPost(Post post, Usuario usuario) {
		String hql = "from Leitura l where l.post.id = ? and l.usuario.id = ?";
		Query query = em.createQuery(hql);
		query.setParameter(1, post.getId());
		query.setParameter(2, usuario.getId());

		List<Leitura> leituraList = query.getResultList();
		if (leituraList.size() > 0) {
			return leituraList.get(0);
		} else {
			return null;
		}
	}

}
